#ifndef COMMAND_H
#define COMMAND_H

namespace gcode {

	enum CommandID {
		CMD_NONE,
		CMD_LINE_NUMBER,
		CMD_PROGRAM_NUMBER,
		CMD_BLOCK_NUMBER,
		CMD_CUTTER_RADIUS_NUMBER,
		CMD_CUTTER_RADIUS_LEFT,
		CMD_CUTTER_RADIUS_RIGHT,
		CMD_TOOL_LENGTH_NUMBER,
		CMD_TOOL_LENGTH_POSITIVE,
		CMD_TOOL_LENGTH_NEGATIVE,
		CMD_AXIS_X_ARC_CENTER_OFFSET,
		CMD_AXIS_Y_ARC_CENTER_OFFSET,
		CMD_AXIS_Z_ARC_CENTER_OFFSET,
		CMD_METRIC_SYSTEM,
		CMD_AXIS_X_TARGET,
		CMD_AXIS_Y_TARGET,
		CMD_AXIS_Z_TARGET,
		CMD_EXACT_STOP_CHECK, 
		CMD_SELECT_PLANE,
		CMD_GEOMETRY,
		CMD_AXIS_HOME,
		CMD_FEEDRATE_TYPE,
		CMD_FEEDRATE,
		CMD_SPINDLE_ROTATION,
		CMD_SPINDLE_SPEED,
		CMD_SPINDLE_CSS,
		CMD_TOOL
	};

	class Command
	{
		CommandID cmdID_;
		long int parameter_;
	public:
		Command(CommandID cmdID = CMD_NONE, long int parameter = 0)
			: cmdID_(cmdID), parameter_(parameter)
		{
		}
		virtual ~Command()
		{
		}
	};

} // namespace gcode

#endif
